home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 5 / Amiga Tools 5.iso / tools / shell-tools / flp_by_anp / aio.doc < prev    next >
Text File  |  1996-02-24  |  9KB  |  198 lines

  1.  
  2. *****************************************************************************
  3. * Project Details                                                           *
  4. * ---------------                                                           *
  5. * Project Name:    AIO                                                      *
  6. * Project Version: 1                                                        *
  7. * Copyright:       Anthony N Peck                                           *
  8. * Date:            Sunday 28th May 1995                                     *
  9. *                                                                           *
  10. * Contact:                                                                  *
  11. * 68 Woralul St                                                             *
  12. * Waramanga ACT 2611                                                        *
  13. * Australia                                                                 *
  14. *                                                                           *
  15. * E-Mail: Anthony.Peck@Radford.act.edu.au                                   *
  16. *                                                                           *
  17. *****************************************************************************
  18. * Summary                                                                   *
  19. * -------                                                                   *
  20. *                                                                           *
  21. * Usage: AIO <secs> <text>                                                  *
  22. *                                                                           *
  23. * This is a very unusual program in that it is a combination of existing    *
  24. * tools, all of which are useful in certain types of script files.  It      *
  25. * just so happens that I lusted (!) after a program that could display a    *
  26. * message, wait a specified time, clear the screen and then return to the   *
  27. * script.  AIO (All In One) does exactly this.  An example of this is as    *
  28. * follows...                                                                *
  29. *                                                                           *
  30. *       AIO 5 Press Left Mouse Button to exit picture...                    *
  31. *                                                                           *
  32. * This would display the message for 5 seconds, then clear the screen.      *
  33. * Without any text, AIO simply waits the specified time and then clears     *
  34. * the screen. Without any arguments, it prints out the argument template.   *
  35. *                                                                           *
  36. * Leading spaces can be specified by enclosing the <text> in quotation      *
  37. * marks.  For example...                                                    *
  38. *                                                                           *
  39. *       AIO 7 "     An elk in the hand is worth two in the bush"            *
  40. *                                                                           *
  41. * ...would output the text with the leading spaces as well.                 *
  42. *                                                                           *
  43. * The program, source code and my everlasting recidivism are yours FREE!    *
  44. *                                                                           *
  45. *****************************************************************************
  46.                      
  47. ; Some quick equivalents...
  48.  
  49. ExecBase                = $04      ; Location of Exec Base!
  50. LF                      = $0A      ; ASCII character (Line Feed) 
  51. SZMess                  = $41      ; Size of error message
  52. _LVOOpenlibrary         = -$0228   ; Exec function opens libraries
  53. _LVOCloselibrary        = -$019E   ; Exec function closes libraries
  54. _LVODelay               = -$C6     ; Dos function causes a delay
  55. _LVOWrite               = -$30     ; Dos function writes
  56. _LVOOutput              = -$3C     ; Dos function finds output handle
  57.  
  58. ; A couple of macros...
  59.  
  60. EXEC            Macro
  61.         MOVE.L  ExecBase,A6        ; Move Exec into a6
  62.         JSR     _LVO\1(A6)         ; Add Library offset and call function
  63.                 Endm
  64.  
  65. CALLDOS         Macro
  66.         MOVE.L  _DosBase,A6        ; Move Dos into a6
  67.         JSR     _LVO\1(A6)         ; Add Library offset and call function
  68.                 Endm
  69.  
  70. Start:
  71.  
  72. ; The actual program starts here.  The number of supplied parameters is
  73. ; found in D0 and the actual parameters are in a list at a location
  74. ; found in A0.
  75.  
  76.         SUBQ.B  #$01,D0            ; Subtract the program from the list
  77.         MOVE.L  D0,D5              ; Move the number remaining to D5
  78.         MOVE.L  A0,A5              ; Move the parameter address to A5
  79.  
  80. OpenDos:
  81.  
  82.         LEA     Dosname,A1         ; Load the dos library
  83.         CLR.L   D0                 ; Any version will do
  84.         EXEC    Openlibrary        ; Macro opens library
  85.         BEQ     Exit               ; If there's a problem, close down
  86.         MOVE.L  D0,_DosBase        ; Save the return address
  87.  
  88. TestParam:
  89.  
  90. ; Here we test to see if we have a number and then convert it from
  91. ; ascii to hex
  92.  
  93.         TST.B   D5                 ; Test if we have any parameters
  94.         BEQ     Error              ; If not then go write the message
  95.  
  96.         CLR.L   D4                 ; Clear D4 - the actual number
  97.         CLR.L   D5                 ; Clear D5 - the counting register
  98.  
  99. 1$      CLR.L   D0                 ; Clear D0
  100.         MOVE.B  (A5)+,D0           ; Move the first parameter to D0
  101.         CMP.B   #$20,D0            ; Is it a Space?
  102.         BEQ     GoWrite            ; Yep, so finished and outta here ->
  103.         SUB.B   #$30,D0            ; Subtract "0"
  104.         CMP.B   #$0A,D0            ; Compare with the value "10"
  105.         BCC     GoTime             ; Greater than zero, must be a char
  106.         MULU    #$0A,D4            ; Multiply the previous entry by "10"
  107.         ADD     D0,D4              ; Add current number to D4
  108.         BRA     1$                 ; And back for more digital fun...
  109.  
  110. GoWrite:
  111.  
  112. ; Now we move to the second parameter, which is the text to be "echoed"
  113.  
  114.         LEA     Echo,A2            ; Load the Echo memory to A2
  115. 1$      MOVE.B  (A5)+,D0           ; Move the parameter to D0
  116.         CMP.B   #$22,D0            ; Is it a quote?
  117.         BEQ     1$                 ; Yes! So get another character
  118.         MOVE.B  D0,(A2)+           ; Move char to Echo and increment
  119.         ADDQ.B  #$01,D5            ; Add 1 to counter
  120.         CMP.B   #$50,D5            ; Are we at counter limit
  121.         BEQ     GoTime             ; Yes! So we go ->
  122.         CMP.B   #LF,D0             ; Is it a Line Feed?
  123.         BEQ     GoTime             ; Yes! So we go ->
  124.         BRA     1$                 ; Go back for more digital fun...
  125.  
  126. GoTime:
  127.  
  128. ; Now we echo the message and wait the specified time
  129.  
  130.         TST.B   D4                 ; Test if we have a number!
  131.         BEQ     Error              ; Nope...I'm outta here ->
  132.         TST.B   D5                 ; Test if we have any letters
  133.         BEQ     1$                 ; No so skip to timer
  134.         CALLDOS Output             ; Call up the output handle
  135.         MOVE.L  D0,D1              ; Move it to D1
  136.         MOVE.L  #Echo,D2           ; Here's the message to echo
  137.         MOVE.L  D5,D3              ; Here's the number of characters
  138.         CALLDOS Write              ; Write it!
  139. 1$      MULU    #$32,D4            ; Multiply number by ticks (50/sec)
  140.         MOVE.L  D4,D1              ; Move the number of seconds to D1
  141.         CALLDOS Delay              ; Call the Delay function
  142.  
  143.         CALLDOS Output             ; Call the output function
  144.         MOVE.L  D0,D1              ; Shift output handle to D1
  145.         MOVE.L  #Clear,D2          ; Move in "Control L" (Clear character)
  146.         MOVE.L  #$01,D3            ; Just the one thanx
  147.         CALLDOS Write              ; ..and write it 
  148.  
  149. Close:
  150.  
  151.         MOVE.L   _DosBase,A1       ; Move dos base into a1
  152.         EXEC     Closelibrary      ; Macro closes dos
  153.  
  154. Exit:
  155.  
  156.         CLR.L    D0                ; Clear D0
  157.         RTS                        ; Return To System
  158.  
  159. Error:
  160.  
  161.         CALLDOS Output             ; Call the output function
  162.         BEQ     Close              ; No can do so outta here ->
  163.         MOVE.L  D0,D1              ; else shift output handle to D1
  164.         MOVE.L  #Message,D2        ; Load Argument template...
  165.         MOVE.L  #SZMess,D3         ; ...plus the length of the message...
  166.         CALLDOS Write              ; ..and write it  
  167.         BRA     Close              ; I'm gone ->
  168.  
  169. ; Some memory allocations
  170.  
  171. _DosBase:  
  172.  
  173.         DS.L    $1                 ; Memory for Dos Base
  174.  
  175. Echo:
  176.  
  177.         DS.B    $50                ; Memory for user message - 80 chars
  178.  
  179. Clear:
  180.  
  181.         DC.B    $C                 ; Control L - the clear character
  182.  
  183. Dosname:
  184.  
  185.         DC.B    "dos.library",$00  ; dos library name
  186.  
  187. Message:
  188.  
  189.         DC.B    LF,"    "                  ;
  190.         DC.B    "Usage: AIO"               ;
  191.         DC.B    " <secs> <text> "          ; Text of message
  192.         DC.B    "A N Peck - 1995"          ;
  193.         DC.B    LF,LF                      ;
  194.  
  195.         END
  196.  
  197.  
  198.